Router Cache Next.js
TODO
使っていく予定なんだけど、イマイチ、デフォルトの挙動やベストプラクティスがわかっていないので、理解したい。
hr.icon
以下を読み進める。
Client-side Router Cache
これにより、以下をが実現
瞬時の戻る、進むの移動
ナビゲーション間でのフルページリロードの排除
Reactの状態とブラウザの状態の保持
ルーターキャッシュの特徴:
ページはデフォルトではキャッシュされませんが、ブラウザの戻る・進む操作時に再利用される
感想
q: つまり、bfcacheはオフにしていて独自適応しているみたいなこと? Duration 持続時間
キャッシュはブラウザの一時メモリに保存される
ルーターキャッシュの持続時間は以下の2つの要因によって決定される
キャッシュはナビゲーション間で保持
ただし、ページの更新時にクリア
レイアウトとローディング状態のキャッシュは、特定の時間後に自動的に無効化
その期間は、以下で決まる。
デフォルトのプリフェッチ(prefetch={null}or 未指定)
フルプリフェッチ(prefetch={true} or router.prefetch)
静的・動的ページともに5分間
ページの更新はすべてのキャッシュされたセグメントをクリア
感想
デフォルトのプリフェッチ(prefetch={null}or 未指定)
理解メモ
Router Cache
ナビゲーション間で保持されて、ページ更新時にクリア
デフォルトのプリフェッチ(prefetch={null}or 未指定)
フルプリフェッチ(prefetch={true} or router.prefetch)
静的・動的ページともに5分間
デフォルト値
The dynamic property is used when the page is neither statically generated nor fully prefetched (i.e., with prefetch=).
prefetch=trueをしたときのみ、利用できる?
↑の理解から、Router Cacheを使うためには。
code:next.config.js
const nextConfig = {
experimental: {
staleTimes: {
dynamic: 30, //0から30秒?に変更
static: 180, //300(5分)から180(3分)?に変更
},
},
}
感想
metaとかパンくずとか。
Invalidation 無効化
ルーターキャッシュを無効化する方法は2つ
cookies.setまたはcookies.deleteを使用すると、クッキーを使用するルートが古くなるのを防ぐためにルーターキャッシュが無効化される(認証など)。
router.refreshを呼び出すと、ルーターキャッシュが無効化され、現在のルートに対して新しいリクエストがサーバーに送信されます。
感想
router.refreshは、多分今見ているページでやるとリロード入りそう?
Opting out オプトアウト